package Controlador;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.List;
import javax.swing.*;
import javax.swing.JFormattedTextField.*;
import java.io.*;
import java.sql.*;
import Entidades.EntArrendatario;
import Manager.*;
import Utils.ConBd;
import Listas.*;

/**
 *
 * @author AFDM
 */
public class SArrendatario extends HttpServlet {

    int i = 0;
    int nfilas = 0;
    Connection c;

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        EntArrendatario Arrendatario = new EntArrendatario();
        LSL_Arrendatario Lista = new LSL_Arrendatario();
        Lista = (LSL_Arrendatario) request.getSession().getAttribute("servletMsg");
        Arrendatario.setNroDocumento(request.getParameter("NroDocumento"));
        Arrendatario.setNombre(request.getParameter("Nombre"));
        Arrendatario.setApellido(request.getParameter("Apellido"));
        Arrendatario.setEmail(request.getParameter("Email"));
        Arrendatario.setTelefonoFijo(request.getParameter("TelefonoFijo"));
        Arrendatario.setTelefonoCelular(request.getParameter("TelefonoCelular"));
        Arrendatario.setProfesion(request.getParameter("Profesion"));
        Arrendatario.setNroHijos(request.getParameter("NroHijos"));
        String accion = (request.getParameter("action"));
        System.out.print(Arrendatario);
        String doc = request.getParameter("NroDocumento");
        String nom = request.getParameter("Nombre");
        String ap = request.getParameter("Apellido");
        String em = request.getParameter("Email");
        String fi = request.getParameter("TelefonoFijo");
        String cel = request.getParameter("TelefonoCelular");
        String pro = request.getParameter("Profesion");
        String hi = request.getParameter("NroHijos");

        int indicador;
        /*try{
         JOptionPane.showMessageDialog(null, Lista.getCabeza(), "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
         }catch(NullPointerException ex){
         JOptionPane.showMessageDialog(null, ("No funco"), "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
         }*/

        String User = request.getParameter("Registro");

        EntArrendatario cl = new EntArrendatario();

        if ("Bloqueados".equals(request.getParameter("indicador"))) {
            indicador = 2;
        }
        if ("Desbloqueados".equals(request.getParameter("indicador"))) {
            indicador = 1;
        }

        if ("Listar".equals(request.getParameter("Lista"))) {
            /* LSL_Arrendatario negocioC = new LSL_Arrendatario();
             try {
             List<Nodo_Arrendatario> ListaArrendatario = negocioC.ListarArrendatario(Lista);
             request.setAttribute("ListaArrendatario", ListaArrendatario);
             request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
             } catch (Exception ex) {
             Logger.getLogger(SArrendatario.class.getName()).log(Level.SEVERE, null, ex);
             request.setAttribute("mensaje", ex.getMessage());
             }*/
            if (Lista.getCabeza() == null) {
                JOptionPane.showMessageDialog(null, "La base de datos esta vacía", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
                request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
            } else {
                Nodo_Arrendatario A = Lista.getCabeza();
                request.setAttribute("Cabeza", A);
                request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
            }
        }
        if ("LLENAR".equals(request.getParameter("action"))) {
            int X;
            X = Lista.CargarBd();
            JOptionPane.showMessageDialog(null, X, "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
        }

        if ("limpiar".equals(request.getParameter("action"))) {
            response.sendRedirect("GestArrendatarios.jsp");
        }

        if ("crear".equals(request.getParameter("action"))) {

            //ConBd Connection = new ConBd();
            try {
                //ResultSet r = Connection.getConexionMysql().prepareStatement("Select NroDocumento from arrendatario").executeQuery();
                Nodo_Arrendatario r = Lista.getCabeza();
                while (r != null) {
                    if (doc.equals(r.getNroDocumento())) {
                        JOptionPane.showMessageDialog(null, "Este registro ya existe, por favor verifique la cédula", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
                        request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
                    }
                    r = r.getLiga();
                }
            } catch (Exception e) {
            }

            if (doc.equals("") && nom.equals("") && ap.equals("") && fi.equals("")) {
                JOptionPane.showMessageDialog(null, "Campos vacios, por favor llenarlos.", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
                request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
            } else if (doc.equals("")) {
                JOptionPane.showMessageDialog(null, "Por favor, ingrese la cédula.", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
                request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
            } else if (nom.equals("")) {
                JOptionPane.showMessageDialog(null, "Por favor, ingrese los nombres.", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
                request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
            } else if (ap.equals("")) {
                JOptionPane.showMessageDialog(null, "Por favor, ingrese los apellidos.", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
                request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
            } else if (fi.equals("") && cel.equals("")) {
                JOptionPane.showMessageDialog(null, "Por favor, ingrese un numero al que se pueda contactar.", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
                request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
            } else {

                try {
                    Lista.CargarListaConLaBasedeDatos(doc, nom, ap, em, fi, cel, pro, hi);
                    JOptionPane.showMessageDialog(null, "Se guardó correctamente", "Arrendamientos: Nuebo Hogar", JOptionPane.INFORMATION_MESSAGE);
                    request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);

                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, "No se pudo guardar", "Arrendamientos: Nuebo Hogar", JOptionPane.INFORMATION_MESSAGE);
                    System.out.println(e.getMessage());
                    e.printStackTrace();
                }
            }
        }

        if ("modificar".equals(accion)) {

            if (doc.equals("")) {
                JOptionPane.showMessageDialog(null, "Por favor, ingrese la cédula.", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
                request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
            } else {
                //ConBd Connection = new ConBd();
                try {
                    //ResultSet r = Connection.getConexionMysql().prepareStatement("Select *  from arrendatario").executeQuery();
                    LSL_Arrendatario r = Lista;
                    Nodo_Arrendatario B = r.Buscar(doc);
                    if (B != null) {

                        //JOptionPane.showMessageDialog(null, "Encontrado weon!", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
                        response.sendRedirect("GestArrendatarios.jsp");

                        int confirma = JOptionPane.showConfirmDialog(null, "¿Esta seguro de modificar la información de este arrendatario?");
                        if (confirma == JOptionPane.YES_OPTION) {
                            if (nom.equals("")) {
                                nom = B.getNombre();
                                JOptionPane.showMessageDialog(null, "El campo Nombre no puede estar vacío, por lo tanto no se modificara", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
                            }
                            if (ap.equals("")) {
                                ap = B.getApellido();
                                JOptionPane.showMessageDialog(null, "El campo Apellido no puede estar vacío, por lo tanto no se modificara", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
                            }
                            if (em.equals("")) {
                                int Pregunta = JOptionPane.showConfirmDialog(null, "El campo Correo electronico esta vacio, ¿Desea guardarlo asi?");
                                if (Pregunta == JOptionPane.YES_OPTION) {
                                } else {
                                    em = B.getEmail();
                                }
                            }
                            if (fi.equals("")) {
                                int Pregunta = JOptionPane.showConfirmDialog(null, "El campo telefono fijo esta vacio, ¿Desea guardarlo asi?");
                                if (Pregunta == JOptionPane.YES_OPTION) {
                                } else {
                                    fi = B.getTelefonoFijo();
                                }
                            }
                            if (cel.equals("")) {
                                int Pregunta = JOptionPane.showConfirmDialog(null, "El campo telefono celular esta vacio, ¿Desea guardarlo asi?");
                                if (Pregunta == JOptionPane.YES_OPTION) {
                                } else {
                                    cel = B.getTelefonoCelular();
                                }
                            }
                            if (pro.equals("")) {
                                int Pregunta = JOptionPane.showConfirmDialog(null, "El Profesion  esta vacio, ¿Desea guardarlo asi?");
                                if (Pregunta == JOptionPane.YES_OPTION) {
                                } else {
                                    pro = B.getProfesion();
                                }
                            }
                            if (hi.equals("")) {
                                int Pregunta = JOptionPane.showConfirmDialog(null, "El Numero de hijos  esta vacio, ¿Desea guardarlo asi?");
                                if (Pregunta == JOptionPane.YES_OPTION) {
                                } else {
                                    hi = B.getNroHijos();
                                }
                            }

                            //int resultadoModificar = new NArrendatario().modificar(Arrendatario);
                            //request.setAttribute("cli", resultadoModificar);
                            r.Modificar(B, nom, ap, em, fi, cel, pro, hi);
                            JOptionPane.showMessageDialog(null, "Se modificó correctamente", "Arrendamientos: Nuevo Hogar", JOptionPane.INFORMATION_MESSAGE);
                            response.sendRedirect("GestArrendatarios.jsp");
                        } else if (confirma == JOptionPane.NO_OPTION) {
                            request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
                        } else if (confirma == JOptionPane.CLOSED_OPTION) {
                            request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
                        } else if (confirma == JOptionPane.CANCEL_OPTION) {
                            request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
                        }
                    } else {

                        JOptionPane.showMessageDialog(null, "El arrendatario no fue encontrado, verifique el número de documento", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
                        request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
                    }

                } catch (Exception e) {
                }
            }

            ConBd Connection = new ConBd();
            /*try {
             ResultSet r1 = Connection.getConexionMysql().prepareStatement("Select NroDocumento from arrendatario").executeQuery();
             while (r1.next()) {
             if (!doc.equals(r1.getString(1)) && (!doc.equals(""))) {
             request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
             JOptionPane.showMessageDialog(null, "Registro inexistente, por favor verifique el Numero de Documento", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
             }
             }
             } catch (Exception e) {
             }*/

        }

        if ("consultar".equals(accion)) {

            if (doc.equals("")) {
                JOptionPane.showMessageDialog(null, "Por favor, ingrese  el Numero de documento.", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
                request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
            } else {
                Nodo_Arrendatario A = Lista.Buscar(doc);
                if (A != null) {
                    request.setAttribute("NodoConsulta", A);
                    request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
                } else {
                    JOptionPane.showMessageDialog(null, "No se encontro el arrendatario", "Arrendamientos: Nuevo Hogar", JOptionPane.INFORMATION_MESSAGE);
                    request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
                }
            }
            /*
             NArrendatario negocioC = new NArrendatario();
             try {
             EntArrendatario cli = negocioC.Buscar(doc);
             request.setAttribute("cli", cli);
             request.setAttribute("mensaje", "El arrendatario fue encontrado con exito");
             request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
             } catch (Exception ex) {
             Logger.getLogger(SArrendatario.class.getName()).log(Level.SEVERE, null, ex);
             request.setAttribute("mensaje", ex.getMessage());
             }
             }*/

        }

        if ("eliminar".equals(request.getParameter("action"))) {

            if (doc.equals("")) {
                JOptionPane.showMessageDialog(null, "Por favor, ingrese la cédula.", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
                request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
            } else {

                //ConBd Connection = new ConBd();
                try {
                    //ResultSet r = Connection.getConexionMysql().prepareStatement("Select NroDocumento from arrendatario").executeQuery();
                    Nodo_Arrendatario r = Lista.getCabeza();
                    //while (r != null) {
                    //  if (doc.equals(r.getNroDocumento())) {

                    int confirma = JOptionPane.showConfirmDialog(null, "¿Desea eliminar la información de este arrendatario?");

                    if (confirma == JOptionPane.YES_OPTION) {
                            //int resultadoEliminar = new NArrendatario().eliminar(Arrendatario);
                        //request.setAttribute("cli", resultadoEliminar);

                        if (Lista.Eliminar(doc)) {
                            JOptionPane.showMessageDialog(null, "Se eliminó correctamente", "Arrendamientos: Nuevo Hogar", JOptionPane.INFORMATION_MESSAGE);
                            response.sendRedirect("GestArrendatarios.jsp");
                        } else {

                            JOptionPane.showMessageDialog(null, "No se encontro el arrendatario para eliminar", "Arrendamientos: Nuevo Hogar", JOptionPane.INFORMATION_MESSAGE);
                            request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);

                        }
                    } else if (confirma == JOptionPane.NO_OPTION) {
                        request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
                    } else if (confirma == JOptionPane.CLOSED_OPTION) {
                        request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
                    } else if (confirma == JOptionPane.CANCEL_OPTION) {
                        request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
                    }
                } catch (Exception e) {
                }
            }

            /*try {
             ResultSet r1 = Connection.getConexionMysql().prepareStatement("Select NroDocumento from arrendatario").executeQuery();
             while (r1.next()) {
             if (!doc.equals(r1.getString(1)) && (!doc.equals(""))) {
             request.getRequestDispatcher("./GestArrendatarios.jsp").forward(request, response);
             JOptionPane.showMessageDialog(null, "Registro inexistente, por favor verifique el numero de documento", "Advertencia - Arrendamientos: Nuevo Hogar ", JOptionPane.WARNING_MESSAGE);
             }
             }
             } catch (Exception e) {
             }*/
        }

    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
